package designMode.singletonPattern;

/**
 * @ClassName LazySingleton
 * @Description  (饱汉式)延迟实例化单件模式，但是这样在多线程情况下可能会造成多例存在，
 *              解决办法是加入synchronized关键字进行同步，但是每次同步会造成效率低下，
 *              解决办法2是双重验证，减少使用同步，不适用于1.4版本以前
 * @Author LIBOFEI
 * @Date 2020/6/24 20:49
 * @Version 1.0
 **/
public class LazySingleton2 {

    //volatile保证在多个线程里可见性，
    private volatile static LazySingleton2 singleton;

    private LazySingleton2(){

    }

    public  LazySingleton2 getInstance(){
        if(singleton==null){
            synchronized (LazySingleton2.class){
                if(singleton==null){
                    singleton = new LazySingleton2();
                }
            }

        }
        return singleton;
    }
}
